<?php

namespace Lite\Sql;

/**
 * Un set de resultado de una consulta SQL
 * 
 * No crear instancias, utilizar {@see Connection::execute}
 */
interface ResultSet extends IteratorAggregate {
	
	/**
	 * Las columnas seran accedidas como un array posicional 
	 */
	const NUM = 1;
	
	/**
	 * Las columnas seran accedidas como un array asociativo 
	 */
	const ASSOC = 2;
	
	/**
	 * Las columnas seran accedidas con un array posicional y asociativo 
	 */
	const BOTH = 3;
	
	/**
	 * Liberar el set de resultados
	 */
	function free();
	
	/**
	 * Obtener todos los registros del resultado en una sola operacion
	 * 
	 * @return array
	 */
	function fetchAll($type=ResultSet::BOTH);
	
	/**
	 * Obtener el proximo resultado
	 * 
	 * @param int $type
	 * 
	 * @return ResultSet
	 */
	function fetch($type=ResultSet::BOTH);
	
	/**
	 * Obtener el proximo resultado utilizando el metodo de acceso ResultSet::ASSOC
	 * 
	 * El resultado de la invocacion a este metodo es identico 
	 * a <code>fetch(ResultSet::ASSOC)</code>
	 * 
	 * @return ResultRow 
	 */	
	function fetchAssoc();
	
	/**
	 * Obtener el proximo resultado utilizando el metodo de acceso ResultSet::NUM
	 * 
	 * El resultado de la invocacion a este metodo es identico 
	 * a <code>fetch(ResultSet::NUM)</code>
	 * 
	 * @return ResultRow
	 */
	function fetchRow();
	
	/**
	 * Cantidad de resultados obtenidos
	 * 
	 * @return integer
	 */
	function getRowCount();
	
	/**
	 * Cantidad de columnas obtenidos
	 * 
	 * @return integer
	 */
	function getFieldCount();
	
	/**
	 * Cantidad de columnas obtenidos
	 * 
	 * @return ResultRow
	 */
	function getFields();
}
